blob: 73a921ca0f224506a0a5587205495c352909db53 [file] [log] [blame]
Junio C Hamano1a4e8412005-12-27 08:17:231git-push(1)
2===========
3
4NAME
5----
Junio C Hamano01078922006-03-10 00:31:476git-push - Update remote refs along with associated objects
Junio C Hamano1a4e8412005-12-27 08:17:237
8
9SYNOPSIS
10--------
Junio C Hamanoa9b8d242007-05-19 04:51:5511[verse]
Junio C Hamanod6fff402009-09-14 09:40:5012'git push' [--all | --mirror | --tags] [-n | --dry-run] [--receive-pack=<git-receive-pack>]
Junio C Hamanoa9701f02010-01-21 00:42:1613 [--repo=<repository>] [-f | --force] [-v | --verbose] [-u | --set-upstream]
Junio C Hamano7f80ae82008-07-30 18:31:3514 [<repository> <refspec>...]
Junio C Hamano1a4e8412005-12-27 08:17:2315
16DESCRIPTION
17-----------
18
19Updates remote refs using local refs, while sending objects
20necessary to complete the given refs.
21
Junio C Hamano40f2f8d2006-02-07 08:04:3922You can make interesting things happen to a repository
Junio C Hamano1a4e8412005-12-27 08:17:2323every time you push into it, by setting up 'hooks' there. See
Junio C Hamano35738e82008-01-07 07:55:4624documentation for linkgit:git-receive-pack[1].
Junio C Hamano1a4e8412005-12-27 08:17:2325
26
Junio C Hamanoea82cff2009-03-18 01:54:4827OPTIONS[[OPTIONS]]
28------------------
Junio C Hamano40f2f8d2006-02-07 08:04:3929<repository>::
30The "remote" repository that is destination of a push
Junio C Hamanocc0cb312009-01-22 03:38:5031operation. This parameter can be either a URL
32(see the section <<URLS,GIT URLS>> below) or the name
33of a remote (see the section <<REMOTES,REMOTES>> below).
Junio C Hamano40f2f8d2006-02-07 08:04:3934
Junio C Hamano7f80ae82008-07-30 18:31:3535<refspec>...::
Junio C Hamano8b6e23b2009-02-01 06:36:0836The format of a <refspec> parameter is an optional plus
37`{plus}`, followed by the source ref <src>, followed
38by a colon `:`, followed by the destination ref <dst>.
39It is used to specify with what <src> object the <dst> ref
40in the remote repository is to be updated.
Junio C Hamano40f2f8d2006-02-07 08:04:3941+
Junio C Hamano8b6e23b2009-02-01 06:36:0842The <src> is often the name of the branch you would want to push, but
43it can be any arbitrary "SHA-1 expression", such as `master~4` or
44`HEAD` (see linkgit:git-rev-parse[1]).
Junio C Hamano40f2f8d2006-02-07 08:04:3945+
Junio C Hamano8b6e23b2009-02-01 06:36:0846The <dst> tells which ref on the remote side is updated with this
47push. Arbitrary expressions cannot be used here, an actual ref must
48be named. If `:`<dst> is omitted, the same ref as <src> will be
49updated.
50+
Junio C Hamanod533bdb2009-02-25 09:56:5851The object referenced by <src> is used to update the <dst> reference
52on the remote side, but by default this is only allowed if the
Junio C Hamano3f680f32009-11-16 02:10:5453update can fast-forward <dst>. By having the optional leading `{plus}`,
Junio C Hamanod533bdb2009-02-25 09:56:5854you can tell git to update the <dst> ref even when the update is not a
Junio C Hamano3f680f32009-11-16 02:10:5455fast-forward. This does *not* attempt to merge <src> into <dst>. See
Junio C Hamanod533bdb2009-02-25 09:56:5856EXAMPLES below for details.
Junio C Hamano40f2f8d2006-02-07 08:04:3957+
Junio C Hamano3f403b02006-12-13 10:14:1358`tag <tag>` means the same as `refs/tags/<tag>:refs/tags/<tag>`.
Junio C Hamano40f2f8d2006-02-07 08:04:3959+
Junio C Hamano3f403b02006-12-13 10:14:1360Pushing an empty <src> allows you to delete the <dst> ref from
61the remote repository.
Junio C Hamanob713ff12008-05-24 01:12:3062+
Junio C Hamano3f680f32009-11-16 02:10:5463The special refspec `:` (or `{plus}:` to allow non-fast-forward updates)
Junio C Hamanocc0cb312009-01-22 03:38:5064directs git to push "matching" branches: for every branch that exists on
65the local side, the remote side is updated if a branch of the same name
Junio C Hamanob713ff12008-05-24 01:12:3066already exists on the remote side. This is the default operation mode
67if no explicit refspec is found (that is neither on the command line
68nor in any Push line of the corresponding remotes file---see below).
Junio C Hamano1a4e8412005-12-27 08:17:2369
Junio C Hamanoeb415992008-06-08 22:49:4770--all::
Junio C Hamano40f2f8d2006-02-07 08:04:3971Instead of naming each ref to push, specifies that all
Junio C Hamanod2d9ae12007-09-19 02:27:5772refs under `$GIT_DIR/refs/heads/` be pushed.
Junio C Hamano1a4e8412005-12-27 08:17:2373
Junio C Hamanoeb415992008-06-08 22:49:4774--mirror::
Junio C Hamano9d2bbb72007-11-25 04:56:0775Instead of naming each ref to push, specifies that all
Junio C Hamanoa351d142008-06-21 09:40:4076refs under `$GIT_DIR/refs/` (which includes but is not
77limited to `refs/heads/`, `refs/remotes/`, and `refs/tags/`)
Junio C Hamano9d2bbb72007-11-25 04:56:0778be mirrored to the remote repository. Newly created local
79refs will be pushed to the remote end, locally updated refs
80will be force updated on the remote end, and deleted refs
Junio C Hamano47d68a52008-05-06 06:35:4081will be removed from the remote end. This is the default
82if the configuration option `remote.<remote>.mirror` is
83set.
Junio C Hamano9d2bbb72007-11-25 04:56:0784
Junio C Hamanod6fff402009-09-14 09:40:5085-n::
Junio C Hamanoeb415992008-06-08 22:49:4786--dry-run::
Junio C Hamano764a6672007-10-23 01:23:3187Do everything except actually send the updates.
88
Junio C Hamano48bc1ce2009-07-09 16:49:1989--porcelain::
90Produce machine-readable output. The output status line for each ref
91will be tab-separated and sent to stdout instead of stderr. The full
92symbolic names of the refs will be given.
93
Junio C Hamanob141a922010-01-10 19:55:1494--delete::
95All listed refs are deleted from the remote repository. This is
96the same as prefixing all refs with a colon.
97
Junio C Hamanoeb415992008-06-08 22:49:4798--tags::
Junio C Hamano02d6fa52006-01-16 08:23:2399All refs under `$GIT_DIR/refs/tags` are pushed, in
100addition to refspecs explicitly listed on the command
101line.
102
Junio C Hamanoeb415992008-06-08 22:49:47103--receive-pack=<git-receive-pack>::
Junio C Hamano1c958272009-01-12 18:04:21104--exec=<git-receive-pack>::
Junio C Hamanoba4b9282008-07-06 05:20:31105Path to the 'git-receive-pack' program on the remote
Junio C Hamano1ce39ab2007-01-16 22:05:10106end. Sometimes useful when pushing to a remote
107repository over ssh, and you do not have the program in
108a directory on the default $PATH.
109
Junio C Hamanoeb415992008-06-08 22:49:47110-f::
111--force::
Junio C Hamano560a1f62006-01-30 04:19:57112Usually, the command refuses to update a remote ref that is
Junio C Hamano4cd1c0e2007-08-06 04:39:14113not an ancestor of the local ref used to overwrite it.
Junio C Hamano560a1f62006-01-30 04:19:57114This flag disables the check. This can cause the
115remote repository to lose commits; use it with care.
Junio C Hamano1a4e8412005-12-27 08:17:23116
Junio C Hamanoa476efa2008-10-10 15:31:42117--repo=<repository>::
118This option is only relevant if no <repository> argument is
Junio C Hamano1aa40d22010-01-21 17:46:43119passed in the invocation. In this case, 'git push' derives the
Junio C Hamanoa476efa2008-10-10 15:31:42120remote name from the current branch: If it tracks a remote
121branch, then that remote repository is pushed to. Otherwise,
122the name "origin" is used. For this latter case, this option
123can be used to override the name "origin". In other words,
124the difference between these two commands
125+
126--------------------------
127git push public #1
128git push --repo=public #2
129--------------------------
130+
131is that #1 always pushes to "public" whereas #2 pushes to "public"
132only if the current branch does not track a remote branch. This is
Junio C Hamano1aa40d22010-01-21 17:46:43133useful if you write an alias or script around 'git push'.
Junio C Hamano1ce39ab2007-01-16 22:05:10134
Junio C Hamanod0d892c2010-01-24 20:06:29135-u::
136--set-upstream::
137For every branch that is up to date or successfully pushed, add
138upstream (tracking) reference, used by argument-less
139linkgit:git-pull[1] and other commands. For more information,
140see 'branch.<name>.merge' in linkgit:git-config[1].
141
Junio C Hamanoeb415992008-06-08 22:49:47142--thin::
143--no-thin::
Junio C Hamano1aa40d22010-01-21 17:46:43144These options are passed to 'git send-pack'. Thin
Junio C Hamano1ce39ab2007-01-16 22:05:10145transfer spends extra cycles to minimize the number of
146objects to be sent and meant to be used on slower connection.
147
Junio C Hamanoeb415992008-06-08 22:49:47148-v::
149--verbose::
Junio C Hamano1ce39ab2007-01-16 22:05:10150Run verbosely.
151
Junio C Hamano3d23a0a2009-10-19 08:04:30152-q::
153--quiet::
154Suppress all output, including the listing of updated refs,
155unless an error occurs.
156
Junio C Hamano330aae62007-07-06 17:01:58157include::urls-remotes.txt[]
Junio C Hamano1a4e8412005-12-27 08:17:23158
Junio C Hamano6d559fc2008-02-20 10:44:26159OUTPUT
160------
161
162The output of "git push" depends on the transport method used; this
163section describes the output when pushing over the git protocol (either
164locally or via ssh).
165
166The status of the push is output in tabular form, with each line
167representing the status of a single ref. Each line is of the form:
168
169-------------------------------
170 <flag> <summary> <from> -> <to> (<reason>)
171-------------------------------
172
Junio C Hamano48bc1ce2009-07-09 16:49:19173If --porcelain is used, then each line of the output is of the form:
174
175-------------------------------
176 <flag> \t <from>:<to> \t <summary> (<reason>)
177-------------------------------
178
Junio C Hamano6d559fc2008-02-20 10:44:26179flag::
180A single character indicating the status of the ref. This is
181blank for a successfully pushed ref, `!` for a ref that was
182rejected or failed to push, and '=' for a ref that was up to
183date and did not need pushing (note that the status of up to
184date refs is shown only when `git push` is running verbosely).
185
186summary::
187For a successfully pushed ref, the summary shows the old and new
188values of the ref in a form suitable for using as an argument to
189`git log` (this is `<old>..<new>` in most cases, and
Junio C Hamano3f680f32009-11-16 02:10:54190`<old>...<new>` for forced non-fast-forward updates). For a
Junio C Hamano6d559fc2008-02-20 10:44:26191failed update, more details are given for the failure.
192The string `rejected` indicates that git did not try to send the
Junio C Hamano3f680f32009-11-16 02:10:54193ref at all (typically because it is not a fast-forward). The
Junio C Hamano6d559fc2008-02-20 10:44:26194string `remote rejected` indicates that the remote end refused
195the update; this rejection is typically caused by a hook on the
196remote side. The string `remote failure` indicates that the
197remote end did not report the successful update of the ref
198(perhaps because of a temporary error on the remote side, a
199break in the network connection, or other transient error).
200
201from::
202The name of the local ref being pushed, minus its
203`refs/<type>/` prefix. In the case of deletion, the
204name of the local ref is omitted.
205
206to::
207The name of the remote ref being updated, minus its
208`refs/<type>/` prefix.
209
210reason::
211A human-readable explanation. In the case of successfully pushed
212refs, no explanation is needed. For a failed ref, the reason for
213failure is described.
Junio C Hamano6926bef2007-06-16 09:54:05214
Junio C Hamano27a128b2009-08-13 01:23:00215Note about fast-forwards
216------------------------
217
218When an update changes a branch (or more in general, a ref) that used to
219point at commit A to point at another commit B, it is called a
220fast-forward update if and only if B is a descendant of A.
221
222In a fast-forward update from A to B, the set of commits that the original
223commit A built on top of is a subset of the commits the new commit B
224builds on top of. Hence, it does not lose any history.
225
226In contrast, a non-fast-forward update will lose history. For example,
227suppose you and somebody else started at the same commit X, and you built
228a history leading to commit B while the other person built a history
229leading to commit A. The history looks like this:
230
231----------------
232
233 B
234 /
235 ---X---A
236
237----------------
238
239Further suppose that the other person already pushed changes leading to A
240back to the original repository you two obtained the original commit X.
241
242The push done by the other person updated the branch that used to point at
243commit X to point at commit A. It is a fast-forward.
244
245But if you try to push, you will attempt to update the branch (that
246now points at A) with commit B. This does _not_ fast-forward. If you did
247so, the changes introduced by commit A will be lost, because everybody
248will now start building on top of B.
249
250The command by default does not allow an update that is not a fast-forward
251to prevent such loss of history.
252
253If you do not want to lose your work (history from X to B) nor the work by
254the other person (history from X to A), you would need to first fetch the
255history from the repository, create a history that contains changes done
256by both parties, and push the result back.
257
258You can perform "git pull", resolve potential conflicts, and "git push"
259the result. A "git pull" will create a merge commit C between commits A
260and B.
261
262----------------
263
264 B---C
265 / /
266 ---X---A
267
268----------------
269
270Updating A with the resulting merge commit will fast-forward and your
271push will be accepted.
272
273Alternatively, you can rebase your change between X and B on top of A,
274with "git pull --rebase", and push the result back. The rebase will
275create a new commit D that builds the change between X and B on top of
276A.
277
278----------------
279
280 B D
281 / /
282 ---X---A
283
284----------------
285
286Again, updating A with this commit will fast-forward and your push will be
287accepted.
288
289There is another common situation where you may encounter non-fast-forward
290rejection when you try to push, and it is possible even when you are
291pushing into a repository nobody else pushes into. After you push commit
292A yourself (in the first picture in this section), replace it with "git
293commit --amend" to produce commit B, and you try to push it out, because
294forgot that you have pushed A out already. In such a case, and only if
295you are certain that nobody in the meantime fetched your earlier commit A
296(and started building on top of it), you can run "git push --force" to
297overwrite it. In other words, "git push --force" is a method reserved for
298a case where you do mean to lose history.
299
300
Junio C Hamano6926bef2007-06-16 09:54:05301Examples
302--------
303
Junio C Hamanoea82cff2009-03-18 01:54:48304git push::
305Works like `git push <remote>`, where <remote> is the
306current branch's remote (or `origin`, if no remote is
307configured for the current branch).
308
309git push origin::
310Without additional configuration, works like
311`git push origin :`.
312+
313The default behavior of this command when no <refspec> is given can be
314configured by setting the `push` option of the remote.
315+
316For example, to default to pushing only the current branch to `origin`
317use `git config remote.origin.push HEAD`. Any valid <refspec> (like
318the ones in the examples below) can be configured as the default for
319`git push origin`.
320
321git push origin :::
322Push "matching" branches to `origin`. See
323<refspec> in the <<OPTIONS,OPTIONS>> section above for a
324description of "matching" branches.
325
Junio C Hamano6926bef2007-06-16 09:54:05326git push origin master::
327Find a ref that matches `master` in the source repository
328(most likely, it would find `refs/heads/master`), and update
329the same ref (e.g. `refs/heads/master`) in `origin` repository
Junio C Hamanoa9aee782008-04-23 16:09:20330with it. If `master` did not exist remotely, it would be
331created.
Junio C Hamano6926bef2007-06-16 09:54:05332
Junio C Hamano8b6e23b2009-02-01 06:36:08333git push origin HEAD::
334A handy way to push the current branch to the same name on the
335remote.
Junio C Hamano6926bef2007-06-16 09:54:05336
Junio C Hamano7f80ae82008-07-30 18:31:35337git push origin master:satellite/master dev:satellite/dev::
338Use the source ref that matches `master` (e.g. `refs/heads/master`)
339to update the ref that matches `satellite/master` (most probably
340`refs/remotes/satellite/master`) in the `origin` repository, then
341do the same for `dev` and `satellite/dev`.
Junio C Hamano6926bef2007-06-16 09:54:05342
Junio C Hamano8b6e23b2009-02-01 06:36:08343git push origin HEAD:master::
344Push the current branch to the remote ref matching `master` in the
345`origin` repository. This form is convenient to push the current
346branch without thinking about its local name.
347
Junio C Hamanobfd4f9a2007-09-06 08:52:44348git push origin master:refs/heads/experimental::
349Create the branch `experimental` in the `origin` repository
Junio C Hamanoa9aee782008-04-23 16:09:20350by copying the current `master` branch. This form is only
351needed to create a new branch or tag in the remote repository when
352the local name and the remote name are different; otherwise,
353the ref name on its own will work.
Junio C Hamanobfd4f9a2007-09-06 08:52:44354
Junio C Hamano8b6e23b2009-02-01 06:36:08355git push origin :experimental::
356Find a ref that matches `experimental` in the `origin` repository
357(e.g. `refs/heads/experimental`), and delete it.
358
Junio C Hamanod533bdb2009-02-25 09:56:58359git push origin {plus}dev:master::
360Update the origin repository's master branch with the dev branch,
Junio C Hamano3f680f32009-11-16 02:10:54361allowing non-fast-forward updates. *This can leave unreferenced
Junio C Hamanod533bdb2009-02-25 09:56:58362commits dangling in the origin repository.* Consider the
Junio C Hamano3f680f32009-11-16 02:10:54363following situation, where a fast-forward is not possible:
Junio C Hamanod533bdb2009-02-25 09:56:58364+
365----
366 o---o---o---A---B origin/master
367 \
368 X---Y---Z dev
369----
370+
371The above command would change the origin repository to
372+
373----
374 A---B (unnamed branch)
375 /
376 o---o---o---X---Y---Z master
377----
378+
379Commits A and B would no longer belong to a branch with a symbolic name,
380and so would be unreachable. As such, these commits would be removed by
381a `git gc` command on the origin repository.
382
Junio C Hamano8b6e23b2009-02-01 06:36:08383
Junio C Hamano1a4e8412005-12-27 08:17:23384Author
385------
Junio C Hamano0868a302008-07-22 09:20:44386Written by Junio C Hamano <gitster@pobox.com>, later rewritten in C
Junio C Hamano3f403b02006-12-13 10:14:13387by Linus Torvalds <torvalds@osdl.org>
Junio C Hamano1a4e8412005-12-27 08:17:23388
389Documentation
390--------------
391Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
392
393GIT
394---
Junio C Hamanof7c042d2008-06-06 22:50:53395Part of the linkgit:git[1] suite